package com.jiyongjun.component.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * <h2>Spring Bean方法注解</h2>
 * <h3>描述：</h3>
 * <ul>
 *     <li>记录方法入参、异常、出参日志</li>
 *     <li>自动校验方法入参、出参</li>
 *     <li>记录方法描述</li>
 * </ul>
 *
 * @author yongjun.jyj
 * @since 2022/6/13 14:37
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MethodMetadata {
    /** 方法描述 */
    String desc() default "";

    /** 业务id表达式，参考SpringEL表达式 */
    String bizIdExpression() default "";

    boolean autoValidateArgs() default true;

    Class<?>[] argGroup() default {};

    boolean autoValidateResult() default false;

    boolean logArgs() default true;

    /** 是否打印出参日志 */
    boolean logResult() default true;
}
